home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue44 / clinic / TblEdit2.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-01-11  |  2.9 KB  |  118 lines

  1. unit TblEdit2;
  2.  
  3. {$ifdef Ver80} { Delphi 1.0x }
  4.   {$define DelphiLessThan4}
  5. {$endif}
  6. {$ifdef Ver90} { Delphi 2.0x }
  7.   {$define DelphiLessThan4}
  8. {$endif}
  9. {$ifdef Ver93} { C++ Builder 1.0x }
  10.   {$define DelphiLessThan4}
  11. {$endif}
  12. {$ifdef Ver100} { Delphi 3.0x }
  13.   {$define DelphiLessThan4}
  14. {$endif}
  15. {$ifdef Ver110} { C++ Builder 3.0x }
  16.   {$define DelphiLessThan4}
  17. {$endif}
  18.  
  19. interface
  20.  
  21. procedure Register;
  22.  
  23. implementation
  24.  
  25. uses
  26.   DBTables, DsgnIntf, Classes, Dialogs, SysUtils;
  27.  
  28. type
  29.   TTableEditor = class(TComponentEditor)
  30.   private
  31.     FEditor: TComponentEditor;
  32.   public
  33.     constructor Create(AComponent: TComponent; ADesigner:
  34.       {$ifdef DelphiLessThan4}TFormDesigner{$else}IFormDesigner{$endif}); override;
  35.     destructor Destroy; override;
  36.     function GetVerbCount: Integer; override;
  37.     function GetVerb(Index: Integer): string; override;
  38.     procedure ExecuteVerb(Index: Integer); override;
  39.     procedure Edit; override;
  40.   end;
  41.  
  42. const
  43.   NewVerbs = 3;
  44.   TableEditorClass: TComponentEditorClass = nil;
  45.  
  46. constructor TTableEditor.Create(AComponent: TComponent; ADesigner:
  47.   {$ifdef DelphiLessThan4}TFormDesigner{$else}IFormDesigner{$endif});
  48. begin
  49.   inherited Create(AComponent, ADesigner);
  50.   if TableEditorClass <> nil then
  51.     FEditor := TableEditorClass.Create(AComponent, ADesigner);
  52. end;
  53.  
  54. destructor TTableEditor.Destroy;
  55. begin
  56.   FEditor.Free;
  57.   FEditor := nil;
  58.   inherited Destroy
  59. end;
  60.  
  61. function TTableEditor.GetVerbCount: Integer;
  62. begin
  63.   Result := FEditor.GetVerbCount + NewVerbs;
  64.   ShowMessage(Format(
  65.     'Someone wants to know how many component editors ' +
  66.     'we are adding. Well, the answer is %d', [Result]))
  67. end;
  68.  
  69. function TTableEditor.GetVerb(Index: Integer): string;
  70. begin
  71.   { Someone wants the menu caption for one of our component editors }
  72.   case Index of
  73.     0..NewVerbs - 1: Result := Format('Component editor no. %d', [Index + 1])
  74.   else
  75.     Result := FEditor.GetVerb(Index - NewVerbs)
  76.   end;
  77. end;
  78.  
  79. procedure TTableEditor.ExecuteVerb(Index: Integer);
  80. begin
  81.   ShowMessage('Someone has chosen one of our component editors. Here goes...');
  82.   case Index of
  83.     0..NewVerbs - 1: ShowMessage(GetVerb(Index))
  84.   else
  85.     FEditor.ExecuteVerb(Index - NewVerbs)
  86.   end;
  87. end;
  88.  
  89. procedure TTableEditor.Edit;
  90. begin
  91.   ExecuteVerb(0);
  92. end;
  93.  
  94. procedure Register;
  95. var
  96.   TmpTable: TTable;
  97.   TmpTableEditor: TComponentEditor;
  98. begin
  99.   { Make a temporary table }
  100.   TmpTable := TTable.Create(nil);
  101.   try
  102.     { What is the current component editor }
  103.     TmpTableEditor := GetComponentEditor(TmpTable, nil);
  104.     try
  105.       { Make a note of its type }
  106.       TableEditorClass := TComponentEditorClass(TmpTableEditor.ClassType)
  107.     finally
  108.       TmpTableEditor.Free
  109.     end
  110.   finally
  111.     TmpTable.Free
  112.   end;
  113.   { Now add our component editor to the foray }
  114.   RegisterComponentEditor(TTable, TTableEditor);
  115. end;
  116.  
  117. end.
  118.